from django.shortcuts import render
from django import http
from django.views import View
from areas.models import Area
from shop.utils.response_code import RETCODE
from django.core.cache import cache
import logging

# Create your views here.

logger = logging.getLogger('django')

class AreasView(View):
    #省市区联动，如果包含了area_id，就是查询市区数据
    #如果不包含，因为省的parent_id为null，所以利于查询
    def get(self,request):
        area_id = request.GET.get('area_id')
        
        if not area_id:
            #先检查缓存中是否存了province_list
            province_list = cache.get('province_list')
            
            if not province_list:
            #查省数据,filter是查询出模型对象列表
            #get是查询出单个模型对象
            #filter(属性名__条件表达式=值)            
                try:
                    province_model_list = Area.objects.filter(parent__isnull=True)
            
                    #模型列表转换成字典列表
                    province_list = []
                    for province_model in province_model_list:
                        province_dict = {
                            'id': province_model.id ,
                            'name': province_model.name
                        }
                        province_list.append(province_dict)
                
                    #缓存省份数据
                    cache.set('province_list',province_list,3600)
                        
                    #返回Json
                    return http.JsonResponse({
                        'code': RETCODE.OK,
                        'errmsg': 'OK',
                        'province_list': province_list,
                    })
                        
                except Exception as e:
                    logger.error(e)
            #有缓存的情况直接放入Json中
            else:
                return http.JsonResponse({
                            'code': RETCODE.OK,
                            'errmsg': 'OK',
                            'province_list': province_list,
                        })
            
        else:
            #首先查看area_id 对应的 sub_data是否存在缓存当中
            sub_data = cache.get('sub_data_' + area_id)
            
            if not sub_data:
                #查市区数据,此时包含area_id
                #先通过area_id查出省数据，然后关联出市区的数据
                #或者通过area_id查出的是市，然后关联出县区的数据
                parent_mdoel = Area.objects.get(id=area_id)
                #一查多
                sub_model_list = parent_mdoel.subs.all()
                
                subs = []
                for sub_model in sub_model_list:
                    sub_dict = {
                        'id': sub_model.id,
                        'name': sub_model.name
                    }
                    subs.append(sub_dict)
                    
                sub_data = {
                    'id': parent_mdoel.id,
                    'name': parent_mdoel.name,
                    'subs': subs,
                }
                
                cache.set('sub_data_' + area_id,sub_data,3600)

                # {
                #     code, //返回状态码
                #     errmsg //提示信息
                #     {
                #         parent_id, //父id
                #         parent_name, //父name
                #         [
                #             {
                #                 sub_id,
                #                 sub_name
                #             }
                #             ........
                #         ]
                #     }
                # }
                
                return http.JsonResponse({
                    'code': RETCODE.OK,
                    'errmsg': 'OK',
                    'sub_data': sub_data,
                })
                
            else:
                return http.JsonResponse({
                    'code': RETCODE.OK,
                    'errmsg': 'OK',
                    'sub_data': sub_data,
                })
